package Utils.converters;

import Utils.delegations.IFunc;

import java.sql.Date;
import java.text.SimpleDateFormat;

import static Utils.DateTimeUtils.sqlDate2UtilDate;

/**
 * 将各种类型的数据转换为字符串
 *
 * @author d11yu
 */
public final class Data2String implements IFunc<String> {
    private final SimpleDateFormat sdf;

    @Override
    public String invoke() {
        return null;
    }

    @Override
    public String invoke(Object... objs) throws Exception {
        DataType dataType = MyUtils.getDataType(objs[0]);
        switch (dataType) {
            case BOOLEAN:
            case DOUBLE:
            case INT:
            case STRING:
                return objs[0].toString();
            case DATE_UTIL:
                return sdf.format(objs[0]);
            case DATE_SQL:
                return sdf.format(sqlDate2UtilDate((Date) objs[0]));
        }
        return null;
    }

    @Override
    public <T> T invoke(Class<T> clazz, Object... objs) throws Exception {
        return null;
    }

    /**
     * 构造函数，默认会以"yyyy-MM-dd"的格式来储存日期
     */
    public Data2String() {
        this.sdf = new SimpleDateFormat("yyyy-MM-dd");
    }

    /**
     * 构造函数，可以指定日期格式。
     *
     * @param format 日期的格式，例如："yyyy-MM-dd"。
     */
    public Data2String(String format) {
        this.sdf = new SimpleDateFormat(format);
    }
}
